package com.bjpowernode.shop.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bjpowernode.shop.base.BaseProduct;
import com.bjpowernode.shop.constants.CommonConstants;
import com.bjpowernode.shop.domain.Category;
import com.bjpowernode.shop.domain.Prod;
import com.bjpowernode.shop.domain.ProdPropValue;
import com.bjpowernode.shop.domain.ProdTag;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/prod/prodTag")
public class ProdTagController extends BaseProduct {

    // 查询标签列表 分页查询+条件查询
    @GetMapping("/page")
    public ResponseEntity<Page<ProdTag>> page(Page<ProdTag> page, ProdTag prodTag) {
        System.out.println("***prodTag = " + prodTag);
        return ResponseEntity.ok(prodTagService.page(
                // 分页查询
                page,
                new LambdaQueryWrapper<ProdTag>()
                        // 根据状态查询 已写死无法查询禁用
                        // SELECT COUNT(1) FROM prod_tag WHERE status = 1 AND (status = ? AND title LIKE ?)
                        .eq(
                                ObjectUtils.isNotNull(prodTag.getStatus()),
                                ProdTag::getStatus,
                                prodTag.getStatus()
                        )
                        // 根据标签名模糊查询
                        .like(
                                StringUtils.hasText(prodTag.getTitle()),
                                ProdTag::getTitle,
                                prodTag.getTitle()
                        )
                        .orderByAsc(ProdTag::getSeq)
        ));
    }

    // 新增标签
    @PostMapping
    public ResponseEntity<Boolean> saveProdTag(@RequestBody ProdTag prodTag) {
        // 查询数据库中是否有默认类型[1]的标签，如果有，那么这里就是0商家自定义，如果没有，那么这里就是1系统默认
        ProdTag defaultProdTag = prodTagService.getOne(new LambdaQueryWrapper<ProdTag>()
                .eq(ProdTag::getIsDefault, 1));

        return ResponseEntity.ok(prodTagService.save(prodTag
                .setShopId(CommonConstants.DEFAULT_SHOP_ID)
                .setIsDefault(
                        ObjectUtils.isNotNull(defaultProdTag) ? 0 : 1
                )
                .setProdCount(0L)
                .setCreateTime(new Date())
        ));
    }

    // 查询当前要修改的标签
    @GetMapping("/info/{id}")
    public ResponseEntity<ProdTag> getProdTag(@PathVariable Integer id) {
        return ResponseEntity.ok(prodTagService.getById(id));
    }

    // 修改标签【状态无法修改】
    @PutMapping
    @Transactional
    public ResponseEntity<Boolean> updateProdTag(@RequestBody ProdTag prodTag) {
        return ResponseEntity.ok(prodTagService.saveOrUpdate(prodTag.setUpdateTime(new Date())));
    }

    // 删除标签
    @DeleteMapping("/{id}")
    @Transactional
    public ResponseEntity<Boolean> delProdTag(@PathVariable Integer id) {
        ProdTag prodTag = prodTagService.getById(id);
        // 更新删除时间
        prodTagService.saveOrUpdate(prodTag.setDeleteTime(new Date()));
        return ResponseEntity.ok(prodTagService.removeById(id));
    }
    
    // 展示产品属性列表3***********标签列表
    @GetMapping("/listTagList")
    public ResponseEntity<List<ProdTag>> listTagList() {
        return ResponseEntity.ok(prodTagService.list());
    }
}
